package main

import "fmt"

type Human struct {
	Name string
	Age  int
}

type SuperMan struct {
	// 通过引用来实现继承
	Human
	height int64
}

func (human *Human) Walk() {
	fmt.Println("human walk...")
}

func (human *Human) Eat() {
	fmt.Println("human eat...")
}

// 方法覆盖 同名即可
func (s *SuperMan) Walk() {
	fmt.Println("superman walk...")
}

// 新增方法
func (s *SuperMan) Fly() {
	fmt.Println("superman fly...")
}

func main11() {
	human := Human{"zhangsan", 11}
	// 引用形式创建对象
	superMan := SuperMan{human, 8888}
	// 直接赋值创建对象
	superMan = SuperMan{Human{"lisi", 1}, 11}
	// 挨个赋值创建
	var superMan1 SuperMan
	superMan1.Name = "hh"
	superMan1.Age = 1
	superMan1.height = 11
	// 默认能使用父类方法
	superMan.Eat()
	superMan.Walk()
	superMan.Fly()

}
